package cn.school.aop;

import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.springframework.stereotype.Service;

import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Date;

@Service
@Aspect
public class PointCutLog {

    @Around("within(cn.school.mybatis.controller..*)")
    public Object around(ProceedingJoinPoint pjp) throws Throwable {
        long start=System.currentTimeMillis();
        System.out.println("↓============================↓进入方法开始↓============================↓");
        System.out.println("进入方法："+pjp.getSignature().getName()+"\n方法参数："+ Arrays.toString(pjp.getArgs())+"");
        System.out.println(""+pjp.getSignature().getName()+"方法开始时间："+new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS").format(new Date(start))+"");
        System.out.println("↑============================↑进入方法结束↑============================↑");

        Object proceed=pjp.proceed();

        long end=System.currentTimeMillis();
        System.out.println("↓============================↓离开方法开始↓============================↓");
        System.out.println("离开方法："+pjp.getSignature().getName()+"\n方法结束时间："+new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS").format(new Date(end))+"");
        System.out.println(""+pjp.getSignature().getName()+"方法共用时："+(end-start)+"毫秒,返回了："+proceed+"");
        System.out.println("↑============================↑离开方法结束↑============================↑");

        return proceed;

    }
//    @Before("within(cn.school.mybatis.controller.*)")
//    public void before(){
//        System.out.format("\33[32;2m---------方法执行前---------%n");
//    }
//    @After("within(cn.school.mybatis.controller.*)")
//    public void after(){
//        System.out.format("\33[32;2m---------方法执行后---------%n");
//    }

//    @Around("within(cn.school.mybatis.controller.*)")
//    public Object around(ProceedingJoinPoint pjp) throws Throwable {
//        long start=System.currentTimeMillis();
//        System.err.format("\33[35;2m进入方法："+pjp.getSignature().getName()+"\n方法参数："+ Arrays.toString(pjp.getArgs())+"%n");
//        System.err.format("\33[35;2m"+pjp.getSignature().getName()+"方法开始时间："+new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS").format(new Date(start))+"%n");
//
//         Object proceed=pjp.proceed();
//
//        long end=System.currentTimeMillis();
//        System.err.format("\33[35;2m离开方法："+pjp.getSignature().getName()+"\n方法结束时间："+new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS").format(new Date(end))+"%n");
//        System.err.format("\33[35;2m"+pjp.getSignature().getName()+"方法共用时："+(end-start)+"毫秒,返回了："+proceed+"%n");
//        return proceed;
//
//    }



}
